import request from "@/utils/request";

/**
 * 通知类型
 */
export type NotificationType = "update" | "event" | "maintenance" | "announcement";

/**
 * 通知查询参数
 */
export interface NotificationQuery extends PageQuery {
  type?: NotificationType;
  read?: boolean;
}

/**
 * 通知链接
 */
export interface NotificationLink {
  /** 链接ID */
  id?: number;
  /** 链接标题 */
  title: string;
  /** 链接URL */
  url: string;
}

/**
 * 通知信息接口
 */
export interface GameNotification {
  /** 通知ID */
  id: number;
  /** 通知标题 */
  title: string;
  /** 通知摘要 */
  summary: string;
  /** 通知内容（HTML） */
  content: string;
  /** 通知类型 */
  type: NotificationType;
  /** 通知时间 */
  time: string;
  /** 是否已读 */
  read: boolean;
  /** 相关链接 */
  links?: NotificationLink[];
}

/**
 * 获取通知列表
 *
 * @param params 查询参数
 * @returns 通知列表和总数
 */
export function getNotifications(params: NotificationQuery): Promise<{list: GameNotification[], total: number}> {
  return request({
    url: '/api/v1/game/informs/page',
    method: 'get',
    params
  });
}

/**
 * 获取通知详情
 *
 * @param id 通知ID
 * @returns 通知详情
 */
export function getNotificationDetail(id: number): Promise<GameNotification> {
  return request({
    url: `/api/v1/game/informs/${id}`,
    method: 'get'
  });
}

/**
 * 标记通知为已读
 *
 * @param id 通知ID
 */
export function markAsRead(id: number): Promise<boolean> {
  return request({
    url: `/api/v1/game/informs/${id}/read`,
    method: 'put'
  });
}

/**
 * 创建通知
 * 
 * @param data 通知数据
 * @returns 通知ID
 */
export function createInform(data: any): Promise<number> {
  return request({
    url: '/api/v1/game/informs',
    method: 'post',
    data
  });
}

/**
 * 更新通知
 * 
 * @param id 通知ID
 * @param data 通知数据
 * @returns 是否成功
 */
export function updateInform(id: number, data: any): Promise<boolean> {
  return request({
    url: `/api/v1/game/informs/${id}`,
    method: 'put',
    data
  });
}

/**
 * 删除通知
 * 
 * @param id 通知ID
 * @returns 是否成功
 */
export function deleteInform(id: number): Promise<boolean> {
  return request({
    url: `/api/v1/game/informs/${id}`,
    method: 'delete'
  });
} 